package org.example.dbcompare.model.config;

import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.util.List;

/**
 * 表数据同步与比对配置项
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DataCompareItem {
    /**
     * 表名（可带schema，如：public.user）
     */
    private String tableName;

    /**
     * 是否为全量同步表（true表示目标表同步前会清理数据）
     */
    private Boolean fullSync;

    /**
     * where限定条件，仅同步/比对指定范围的数据（SQL片段）
     */
    private String whereClause;

    /**
     * 主键或唯一性字段列表（对比主键信息，支持联合主键）
     * 如果为空则使用表结构中的主键
     * 如果表结构无主键则使用所有字段
     */
    private List<String> compareKeys;

    /**
     * 需要同步或比对的字段
     * 如果为空则使用所有字段
     */
    private List<String> selectColumns;

    /**
     * 指定无需同步或比对的字段（如自动生成的、更新时间等）
     */
    private List<String> excludeColumns;
    private Boolean compareAndSyncAdded;

    /**
     * 是否同步/比对已修改的数据
     */
    private Boolean compareAndSyncModified;

    /**
     * 是否同步/比对已被删除的数据
     */
    private Boolean compareAndSyncDeleted;

    /**
     * 逻辑删除标记列（如有则支持软删除比对）
     */
    private String logicalDeleteColumn;

    /**
     * 批量同步时单批操作数量
     */
    private Integer batchSize;

    /**
     * 主键及字段比对时是否忽略大小写
     */
    private Boolean ignoreCase;

    /**
     * 备注
     */
    private String desc;
}
